//封装JS获取标签id，之后用 my$(id)代替document.getElementById(id)
function my$(id) {
	return document.getElementById(id)
}

//兼容:设置任意标签中间的任意文字
function setText(element, text) {
	if (typeof element.textContent == "undefined") {
		element.innerText = text;
	} else {
		element.textContent = text;
	}
}
//兼容:获取任意标签的文字	 
function getText(element) {
	if (typeof element.textContent == "undefined") {
		return element.innerText;
	} else {
		return element.textContent;
	}
}
//兼容:获取任意一个父级元素的第一个子级元素
function getFirstElementChild(element) {
	if (element.firstElementChild) {
		console
		return element.firstElementChild;
	} else {
		var nodes = element.firstChild;
		while (nodes && nodes.nodeType != 1) {
			nodes = nodes.nextSibling;
		}
		return nodes;
	}
}
//兼容:获取任意一个父级元素的最后一个子级元素
function getLastElementChild(element) {
	if (element.lastElementChild) {
		return element.lastElementChild;
	} else {
		var nodes = element.lastChild;
		while (nodes && nodes.nodeType != 1) {
			nodes = nodes.previousSibling;
		}
		return nodes;
	}
}

//兼容:绑定事件的兼容
function addEventListener(element, type, fn) {
	if (element.addEventListener) {
		element.addEventListener(type, fn, false);
	} else if (element.attachEvent) {
		element.attachEvent("on" + type, fn)
	} else {
		element["on" + type] = fn;
	}
}
//兼容:为任意的一个元素,解绑对应的事件
function removeEventListener(element, type, fn) {
	if (element.removeEventListener) {
		element.removeEventListener(type, fn, false);
	} else if (element.detachEvent) {
		element.detachEvent("on" + type, fn);
	} else {
		element["on" + type] = null;
	}
}

//封装动画:缓动移动不同的值 //attr元素的属性    targrt属性值名
function animate(element, attr, target, time) {
	clearInterval(element.timeR)
	element.timeR = setInterval(function () {
		var currle = parseInt(getStyle(element, attr));
		var step = (target - currle) / 10;
		step = step > 0 ? Math.ceil(step) : Math.floor(step);
		currle += step;
		if (currle != target) {
			element.style[attr] = currle + "px";
		} else {
			clearInterval(element.timeR)
		}
		//					console.log("增加位置："+currle+"当前位置："+target+"移动步数:"+step)
	}, time)
}

//缓速向左动画
function slowAnimation(element, target, time) {
	clearInterval(element.timeR)
	element.timeR = setInterval(function () {
		var currle = element.offsetLeft;
		var step = (target - currle) / 10;
		step = step > 0 ? Math.ceil(step) : Math.floor(step);
		currle += step;
		if (currle != target) {
			element.style.left = currle + "px";
		} else {
			clearInterval(element.timeR)
		}
		//					console.log("增加位置："+currle+"当前位置："+target+"移动步数:"+step)
	}, time)
}

//获取任意一个元素的任意一个属性的当前的值---当前属性的位置值
function getStyle(element, attr) {
	return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr] || 0;
}
//动画函数  有宽高 top left opactiy zIndex
function animateStyle(element, json, time, fn) {
	clearInterval(element.timeId); //清理定时器
	//定时器,返回的是定时器的id
	element.timeId = setInterval(function () {
		var flag = true; //默认,假设,全部到达目标
		//遍历json对象中的每个属性还有属性对应的目标值
		for (var attr in json) {
			//判断这个属性attr中是不是opacity
			if (attr == "opacity") {
				//获取元素的当前的透明度,当前的透明度放大100倍
				var current = getStyle(element, attr) * 100;
				//目标的透明度放大100倍
				var target = json[attr] * 100;
				var step = (target - current) / 10;
				step = step > 0 ? Math.ceil(step) : Math.floor(step);
				current += step; //移动后的值
				element.style[attr] = current / 100;

			} else if (attr == "zIndex") { //判断这个属性attr中是不是zIndex
				//层级改变就是直接改变这个属性的值
				element.style[attr] = json[attr];

			} else {
				//普通的属性
				//获取元素这个属性的当前的值
				var current = parseInt(getStyle(element, attr));
				//当前的属性对应的目标值
				var target = json[attr];
				//移动的步数
				var step = (target - current) / 10;
				step = step > 0 ? Math.ceil(step) : Math.floor(step);
				current += step; //移动后的值
				element.style[attr] = current + "px"
			}
			//是否到达目标
			if (current != target) {
				flag = false
			}
		}
		if (flag) {
			//清理定时器
			clearInterval(element.timeId);
			//所有的属性到达目标才能使用这个函数,前提是用户传入了这个函数
			if (fn) {
				fn();
			}
		}
		//测试代码
		//		console.log(element);
		//		console.log(attr);
		//		console.log("目标:" + target + ",当前:" + current + ",每次的移动步数:" + step);
	}, time);
}

//兼容:封装获取页面向上或者向左卷曲出去的距离的值
function getScroll() {
	return {
		top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0,
		left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,
	}
}

//兼容:封装获取页面向上或者向左卷曲出去的距离的值   随着鼠标移动的距离

var evt = {
	getEvent: function (evt) {
		return window.event || evt;
	},
	getclientX: function (evt) {
		return this.getEvent(evt).clientX;
	},
	getclientY: function (evt) {
		return this.getEvent(evt).clientY;
	},


	getScrollLR: function (evt) {
		return {
			left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,
			top: window.pageYOffset || document.documentElement.scrollt || document.body.scrollTop || 0,
		}
	},

	getPageX: function (evt) {
		return this.getEvent(evt).pageX ? this.getEvent(evt).pageX : this.getclientX(evt) + this.getScrollLR(evt).left;
	},

	getPageY: function (evt) {
		return this.getEvent(evt).pageY ? this.getEvent(evt).pageY : this.getclientY(evt) + this.getScrollLT(evt).top;
	},

}

//获取超链接,注册点击事件,显示登录框和遮挡层
function dragFloatingLayer(click, mainClass, dragDropClass, backgroup, closeBtn) {
	$(click).click(function () {
		document.querySelector(mainClass).style.display = "block"
		$(".kim-position-ab").css("display", "block")
		document.querySelector(mainClass).style.zIndex = 10000
		if (backgroup) {
			document.querySelector(backgroup).style.display = "block"
		}
	})

	//获取关闭,注册点击事件,隐藏登录框和遮挡层
	$(".kim-close").click(function () {
		document.querySelector(mainClass).style.display = "none"
		if (backgroup) {
			document.querySelector(backgroup).style.display = "none"
		}
	})

	if (closeBtn) {
		document.querySelector(closeBtn).onclick = function () {
			document.querySelector(mainClass).style.display = "none"
			if (backgroup) {
				document.querySelector(backgroup).style.display = "none"
			}
		}
	}

	//按下鼠标,移动鼠标,移动登录框
	document.querySelector(dragDropClass).onmousedown = function (e) {
		//获取此时的可视区域的横坐标-此时登录框距离左侧页面的横坐标
		var spaceX = e.clientX - document.querySelector(mainClass).offsetLeft
		var spaceY = e.clientY - document.querySelector(mainClass).offsetTop
		//移动的事件
		document.onmousemove = function (e) {
			//新的可视区域的横坐标-spaceX====>新的值--->登录框的left属性
			var x = e.clientX - spaceX
			var y = e.clientY - spaceY
			document.querySelector(mainClass).style.left = x + "px"
			document.querySelector(mainClass).style.top = y + "px"

		}
	}

	document.onmouseup = function () {
		document.onmousemove = null; //当鼠标抬起的时候,把鼠标移动事件干掉
	}
}




//锚点
var anchorPoint = location.hash.substr(1)
if (anchorPoint) {
	console.log(anchorPoint)
	$("." + anchorPoint).css("color", "#fff")
}



//------------------------------------ JQ-------------------------------------
//封装点击切换的事件
var SelectTip = (function () {
	var change = function (click, displayElement, cliclStyle, displayStyle) {
		$(click).click(function () {
			$(this).addClass(cliclStyle).siblings().removeClass(cliclStyle);
			$(displayElement).eq($(this).index()).addClass(displayStyle).siblings().removeClass(displayStyle);
		})
	}
	return {
		change: change
	};
})()

//JQ知识
//width() - 返回元素的宽度。
//height() - 返回元素的高度。
//innerWidth() 方法返回元素的宽度（包括内边距）。                    
//innerHeight() 方法返回元素的高度（包括内边距）。                    
//outerWidth() 方法返回元素的宽度（包括内边距和边框）。             
//outerHeight() 方法返回元素的高度（包括内边距和边框）。        
//outerWidth(true) 方法返回元素的宽度（包括内边距、边框和外边距）
//outerHeight(true) 方法返回元素的高度（包括内边距、边框和外边距）。  
//返回文档（HTML 文档）$(document).height()的高度
//返回窗口（浏览器视口）$(window).height()的高度